//
//  HYYUserAccountModel.swift
//  Hyy9Weibo
//
//  Created by Air on 16/3/28.
//  Copyright © 2016年 hyy. All rights reserved.
//

import UIKit


/// 专门来负责模型的相关操作
class HYYUserAccountModel: NSObject {
    
    //单例
    static let sharedInstance : HYYUserAccountModel = HYYUserAccountModel()
    
    private override init() {
        super.init()
        //从沙盒里加载帐号
        userAccount = loadAccount()
    }
    
    //帐号路径
    private let accountPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/account.plist")
    
    //是否登陆,只读计算型属性
    var userLogin:Bool{
        get{
            return userAccount != nil
        }
    }
    
    //帐号
    var userAccount:HYYUserAccount?
    
    //加载access_token post
    //1.定义闭包
    func loadAccessToken(code:String, completion : (error : NSError?) ->()){
        //获取AccessToken的url
        let urlString = "https://api.weibo.com/oauth2/access_token"
        //拼接参数
        let parameters = [
            "client_id" : client_id,
            "client_secret" : client_secret,
            "grant_type" : "authorization_code",
            "code" : code,
            "redirect_uri" : redirect_uri
        ]
        //发送请求
        HYYNetworkTool.sharedInstance.requsetPOST(urlString, parameters: parameters) { (result, error) in
            if error != nil{
                //出错
                completion(error: error)
                return
            }
            //将网络返回帐号赋值给属性
            //讲accesstoken保存起来，下次直接拿来用，省的用户每次进入都需要登陆
            //将网络返回的帐号赋值给属性，别人直接访问属性
            self.userAccount = HYYUserAccount(dict: result!)
            print("userAccount : \(self.userAccount)")
            //保存模型到沙盒
            self.saveAccount()
            //通知控制器保存完成
            completion(error: nil)
        }
        }
        
        /*
         afn.post:
         1.请求url地址
         2.请求参数
         
         */
//        HYYNetworkTool.sharedInstance.afnManager.POST(urlString, parameters: parameters, progress: nil, success: { (_, result) in //1.task 2.响应结果
//            print("result : \(result)")
//            //讲accesstoken保存起来，下次直接拿来用，省的用户每次进入都需要登陆
//            if let dict = result as? [String : AnyObject]{
//                //字典转模型
//                //将网络返回的帐号赋值给属性，别人直接访问属性
//                self.userAccount = HYYUserAccount(dict: dict)
//                print("userAccount : \(self.userAccount)")
//                
//                //保存模型到沙盒
//                self.saveAccount()
//                //2.通知控制器保存完成
//                completion(error: nil)
//            }
//            
//        }) { (_, error) in //1.task 2.响应失败原因
//            //2.通知控制器出现错误
//            completion(error: error)
//        }
//    }
    
    //获取用户信息
    func loadUesrInfo(completion:(error:NSError?)->()){
        //url
        let urlString = "https://api.weibo.com/2/users/show.json"
        
        //参数
        let parameters : [String:AnyObject] = [
            "access_token": (userAccount?.access_token)!,
            "uid": (userAccount?.uid)!
        ]

        HYYNetworkTool.sharedInstance.requestGET(urlString, parameters: parameters) { (result, error) in
            if error != nil {
                //出现错误
                completion(error: error)
                return
            }
            //给帐号赋值screen_name
            self.userAccount?.screen_name = result?["screen_name"] as? String
            self.userAccount?.avatar_large = result?["avatar_large"] as? String
            //将新的数据保存到沙盒
            self.saveAccount()
            completion(error: nil)
        }
        
        
//        HYYNetworkTool.sharedInstance.afnManager.GET(urlString, parameters: parameters, progress: nil, success: { (_, result) in
//            //result实际上是一个json -> ios里面的字典
////            HYYPrint(msg: "result : \(result)")
//            let dict = result as? [String:AnyObject]
//            //给帐号赋值screen_name，avatar_large
//            self.userAccount?.screen_name = dict?["screen_name"] as? String
//            self.userAccount?.avatar_large = dict?["avatar_large"] as? String
//            //将新的数据保存到沙盒
//            self.saveAccount()
//            completion(error: nil)
//            
//            }) { (_, error) in
//                completion(error: error)
//        }
    }
    
    //保存模型到沙盒
    private func saveAccount(){
        
        if userAccount != nil {
            //有帐号才需要保存
            print("accountPath : \(accountPath)")
             NSKeyedArchiver.archiveRootObject(userAccount!, toFile: accountPath)
        }
       }
    //从沙盒加载数据
    private func loadAccount()-> HYYUserAccount? {
        let userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? HYYUserAccount
        
        //如果加载出帐号，需要判断accountToken是否过期
        //expiresDate和当前时间判断
        //nsdate()当前时间
        /*
         NSComparisonResult.OrderedDescending大于当前时间
         NSComparisonResult.OrderedAscending小于当前时间
         NSComparisonResult.OrderedSame等于
         */
        
        //测试过期时间1.让服务器返回一个过期时间来测试 2.改模拟器时间 3.重新给expiresDate赋值
//        userAccount?.expiresDate = NSDate(timeIntervalSinceNow: -1000)
        if userAccount != nil && userAccount?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
            print("userAccount : \(userAccount)")
            return userAccount
        }
        return nil
    }
        
    
    
}
